package HashSet;
/*
 * 
 * 
 * 
 */


public class Person {
	String name;
	int age;
	
	public Person(String name,int age) {
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
	@Override
	public boolean equals(Object obj) {
		if(this == obj) return true;
		if(this.getClass() != obj.getClass()) return false;
		//向下转型
		System.out.println("-------");
		Person p = (Person)obj;
		if(!this.name.equals(p.name)) {
			return false;
		}
		if(this.age != p.age) {
			return false;
		}
		return true;
	}
	
	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		/*
		 * 当hashcode方法永远返回整数1时，所有对象的hash值都是一样的。
		 * 有一些对象他的成员变量完全不同，但是他们还需要进行hash和equals方法的比较
		 * 如果我们可以让成员变量不同的对象，他们的hash值也不同，这就可以减少一部分equals方法的比较
		 * 从而可以提高我们程序的效率
		 * 
		 * 可以尝试hashCode方法的返回值和对象的成员变量有关
		 * 可以让hashCode方法返回所有变量成员变量之和
		 * 让基本数据类型直接相加，然后引用数据类型获取hashCode方法返回值再相加（boolean不可以参与运算）
		 */
		return age + name.hashCode();
	}
}
